class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int size = nums.size();
        if(size == 0) // 处理边界
            return {-1, -1}; //返回一个vector里两个整数的方式
 
        int left = 0, right = size - 1; // 找左端点
        while(left < right) // 一定是小于
        {
            int mid = left + (right - left) / 2; // 元素个数是偶数时，中点是中间的左边
            if(nums[mid] < target) // 左端点肯定不在左边
                left = mid + 1;
            else
                right = mid; // 可能自己是左端点，可能左端点还在左边
        }
        if(nums[left] != target) // 没有端点的情况
            return {-1, -1};
        int tmp = left; // 记录左端点
 
        right = size - 1; // 找右端点，left不用重置
        while(left < right)
        {
            int mid = left + (right - left + 1) / 2; // 元素个数是偶数时，中点是中间的右边
            if(nums[mid] > target) // 右端点肯定右在左边
                right = mid -1;
            else
                left = mid; // 可能自己是右端点，可能右端点还在右边
        }
        return {tmp, right};
    }
};